//
//  ProblemMS0106.swift
//  TestProject
//
//  Created by 毕武侠 on 2021/3/27.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 面试题 01.06. 字符串压缩
 字符串压缩。利用字符重复出现的次数，编写一种方法，实现基本的字符串压缩功能。比如，字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短，则返回原先的字符串。你可以假设字符串中只包含大小写英文字母（a至z）。

 示例1:
  输入："aabcccccaaa"
  输出："a2b1c5a3"
 示例2:

  输入："abbccd"
  输出："abbccd"
  解释："abbccd"压缩后为"a1b2c2d1"，比原字符串长度更长。
 提示：

 字符串长度在[0, 50000]范围内。
 */
@objcMembers class ProblemMS0106: NSObject {
    func solution() {
        print(compressString("aabcccccaaa"))
        print(compressString("abbccd"))
    }
    
    /*
     1: 创建一个字符lastC，记录上一次字符，创建一个n记录上一个字符的个数
     2: 创建一个数组charts:[Character]
     3: 遍历字符串，当c不等于lastC时，把n放入数组中，把c输入数组中, lastC = c, n = 0
     4: 当c与lastC相等时，n+=1
     */
    func compressString(_ S: String) -> String {
        if S.count <= 2 {
            return S
        }
        
        var n = 1
        
        let charts = Array(S)
        var lastC: Character = charts[0]
        var str = ""
        for i in 1..<charts.count {
            if charts[i] == lastC {
                n += 1
            } else {
                str.append("\(lastC)\(n)")
                lastC = charts[i]
                n = 1
                // 多这个判断 会超时
//                if str.count >= S.count {
//                    return S
//                }
            }
        }
        if n != 0 {
            str.append("\(lastC)\(n)")
        }
        return str.count >= S.count ? S : str
    }
}
